package com.taotao.sso.service.impl;

import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import com.taotao.common.pojo.TaotaoResult;
import com.taotao.mapper.TbUserMapper;
import com.taotao.pojo.TbUser;
import com.taotao.pojo.TbUserExample;
import com.taotao.pojo.TbUserExample.Criteria;
import com.taotao.sso.service.UserResgisterService;

@Service
public class UserResgisterServiceImpl implements UserResgisterService {
	
	@Autowired
	private TbUserMapper userMapper;
	

	@Override
	public TaotaoResult checkData(String param, Integer type) {
		
		//1.注入mapper
		//2.根据参数动态获取查询条件
		TbUserExample tbUserExample = new TbUserExample();
		Criteria criteria =  tbUserExample.createCriteria();
		if (type ==1) { //username
			if(StringUtils.isEmpty(param)) {
				return TaotaoResult.ok(false);
			}
			criteria.andUsernameEqualTo(param);
		}else if (type == 2) {
			//phone
			criteria.andPhoneEqualTo(param);
		}else if (type == 3) {
			//email
			criteria.andEmailEqualTo(param);
		}else {
			//非法的参数
			//return 非法的
			return TaotaoResult.build(400, "非法的参数");
		}
		
		
		//3.调用mapper的查询方法，获取数据
		List<TbUser> list = userMapper.selectByExample(tbUserExample);
		//4.如果查询到数据，则数据不可用 为false
		if(list != null&&list.size()>0) {
			return TaotaoResult.ok(false);
		}
		//5.如果查询不到数据，则数据可用，为true
		return TaotaoResult.ok(true);
	}


	@Override
	public TaotaoResult register(TbUser tbUser) {
		// 1.注入mapper
		// 2.校验数据
			//2.1校验用户名和密码不能为空
		if(StringUtils.isEmpty(tbUser.getUsername())) {
			return TaotaoResult.build(400, "注册失败，请校验用户名不为空后再提交数据");
		}if(StringUtils.isEmpty(tbUser.getPassword())) {
			return TaotaoResult.build(400, "注册失败，请校验密码不为空后再提交数据");
		}
			//2.2校验用户名是否被注册
		TaotaoResult taotaoResult= checkData(tbUser.getUsername(), 1);
		if(!(boolean) taotaoResult.getData()) {
			//数据不可用
			return TaotaoResult.build(400, "注册失败，用户名已注册");
		}
			//2.3校验电话号码是否被注册
		if(StringUtils.isNoneBlank(tbUser.getPhone())) {
			TaotaoResult resultPhone = checkData(tbUser.getPhone(), 2);
			if(!(boolean) resultPhone.getData()) {
				//数据不可用
				return TaotaoResult.build(400, "注册失败，电话号码已注册");
			}
		}
			//2.4校验邮箱是否被注册
		if(StringUtils.isNoneBlank(tbUser.getEmail())) {
			TaotaoResult resultEmail = checkData(tbUser.getPhone(), 2);
			if(!(boolean) resultEmail.getData()) {
				//数据不可用
				return TaotaoResult.build(400, "注册失败，邮箱已注册");
			}
		}
		// 3.校验通过，补全其他的属性
		tbUser.setCreated(new Date());
		tbUser.setUpdated(tbUser.getCreated());
		// 4.对密码进行MD5加密
		String md5password = DigestUtils.md5DigestAsHex(tbUser.getPassword().getBytes());
		tbUser.setPassword(md5password);
		// 5.插入数据
		userMapper.insertSelective(tbUser);
		// 6.返回taotaoResult
		return TaotaoResult.ok();
	}

}
